const fp = require('lodash/fp')
const { Maybe, Container } = require('./support')
    //  练习1：使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([5, 6, 1])
let ex1 = () => {} // 你需要实现的函数
    // 练习1答案
let ex1 = maybe.map(x => fp.map(fp.add(1), x))
console.log(ex1)




// 练习2: 实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = () => {} // 你需要实现的函数
    // 练习2答案
let ex2 = fp.map(fp.first)
console.log(xs.map(ex2), 999)




// 练习3：
let safeProp = fp.curry(function(x, o) { return Maybe.of(o[x]) })
let user = { id: 2, name: "Albert" }
let ex3 = () => {} // 你需要实现的函数
    // 练习2答案
let ex3 = fp.flowRight(fp.map(fp.first), safeProp('name'))
console.log(ex3(user))



// 练习4: 使用Maybe重写ex4,不要有if语句
let ex4 = function(n) {
        if (n) {
            return parseInt(n)
        }
    }
    // 练习4答案
let ex4 = n => Maybe.of(n).map(parseInt)